package com.yiwyn.Behavioral.strategy;

import java.util.HashMap;
import java.util.Map;

public class StrategyDemo {

    public static void main(String[] args) {
        PayContext payContext = new PayContext();
        payContext.pay();
    }

    /**
     * 支付服务Context
     */
    static class PayContext {
        /**
         * 这里payService层直接调用了底层逻辑，若逻辑
         */
        public void pay() {
            IPayStrategy pay = AppConfig.getPay();
            pay.pay();
        }
    }

    /**
     * 模拟系统配置
     */
    static class AppConfig {
        // 读取系统配置
        private static final String payChannel = System.getProperty("payChannel", "AliPay");
        // 支付信息实现
        private static final Map<String, IPayStrategy> payMap = new HashMap<>();

        static {
            payMap.put("AliPay", new AliIPayStrategy());
            payMap.put("WxPay", new WxIPayStrategy());
        }

        public static IPayStrategy getPay() {
            return payMap.get(payChannel);
        }
    }

    /**
     * 支付接口
     */
    interface IPayStrategy {
        void pay();
    }


    /**
     * 阿里支付策略
     */
    static class AliIPayStrategy implements IPayStrategy {

        @Override
        public void pay() {
            System.out.println("阿里支付");
        }
    }

    /**
     * 微信支付策略
     */
    static class WxIPayStrategy implements IPayStrategy {

        @Override
        public void pay() {
            System.out.println("微信支付");
        }
    }
}
